<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./js/vue.min.js"></script>
</head>
<body>
    <!-- vue的生命周期：一上来运行前4个方法，data中的数据发生变化的时候调用5、6方法，销毁时调用7、8方法
        1.beforeCreate：创建之前
        2.created：已经创建
        3.beforeMount：挂载之前
        4.mounted：挂载完毕  ===>  重要
            在该阶段进行：发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。
        5.beforeUpdate：更新之前
        6.updated：更新完毕
        7.beforeDestroy：销毁之前  ===>  重要
            在该阶段进行： 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。
        8.destroyed：已经销毁
    -->
    
    <!-- 
        关于销毁Vue实例
            1.销毁后借助Vue开发者工具看不到任何信息。
            2.销毁后自定义事件会失效，但原生DOM事件依然有效。
            3.一般不会在beforeDestroy操作数据，因为即便操作数据，也不会再触发更新流程了。
    -->
    <div id="root">
        <h2 v-text="n"></h2>
        <h2>当前的n值是：{{n}}</h2>
        <button @click="add">点我n+1</button>
        <button @click="bye">点我销毁vm</button>
    </div>

    <script>
        Vue.config.productionTip = false;

        const vm = new Vue({
            el: "#root",
            data: {
                n: 1
            },
            methods: {
                add() {
                    console.log('add');
                    this.n++;
                },
                bye() {
                    console.log('bye');
                    // 调用$destroy方法销毁vm，销毁后原生的dom事件依然有效，n的值也还会增加，但是vue已经检测不到了
                    this.$destroy()
                }
            },
            watch: {
                n() {
                    console.log('n的值改变了');
                }
            },
            beforeCreate() {
                console.log('beforeCreate');
            },
            created() {
                console.log('created'); 
            },
            beforeMount() {
                console.log('beforeMount');
            },
            mounted() {
                console.log('mouted');
            },
            beforeUpdate() {
                console.log('beforeUpdate');
            },
            updated() {
                console.log('updated');
            },
            beforeDestroy() {
                console.log('beforeDestroy');
            },
            destroyed() {
               console.log('destroyed'); 
            },
        })
    </script>
</body>
</html>